﻿using System;
using System.Collections.Generic;
using System.Text;
using EnvDTE;
using EnvDTE80;
using System.IO;

namespace RunVistaGadget31.AdditionalApplicationsWrappers
{
    /// <summary>
    /// 
    /// </summary>
    public class SigntoolRunner : ApplicationRunner
    {
        //String SigntoolPath;
        String WindowsSDKDirectoryPath = String.Empty;

        /// <summary>
        /// 
        /// </summary>
        /// <param name="applicationObject"></param>
        public SigntoolRunner(DTE2 applicationObject)
            : base(applicationObject, false)
        {

        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="applicationObject"></param>
        /// <param name="isRunAsWinApp"></param>
        public SigntoolRunner(DTE2 applicationObject, bool isRunAsWinApp)
            : base(applicationObject, isRunAsWinApp)
        {

        }

        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        public override string GetAppArguments()
        {
            String PFXFilePath = ApplicationRunner.GadgetProp.PfxFilePath;
            String Password = ApplicationRunner.GadgetProp.PfxPassword;
            String TimeStampDllUrl = @"http://timestamp.verisign.com/scripts/timstamp.dll";
            String SigntoolArgs = String.Empty;
            //GadgetPath = GadgetPath.Replace("\"","");
            if (String.IsNullOrEmpty(Password))
            {
                SigntoolArgs = String.Format(" sign /v  /f {0} /t {1} {2}", PFXFilePath, TimeStampDllUrl, GadgetPath);
            }
            else
            {
                SigntoolArgs = String.Format(" sign /v /f {0} /p {1} /t {2} {3}", PFXFilePath, Password, TimeStampDllUrl, GadgetPath);
            }


            return SigntoolArgs;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        public override string GetOutputAndRunApplication()
        {
            GadgetProperties gp = new GadgetProperties();
            base.CalledApplicationPath = gp.SigntoolPath;
            if (base.IsExistCalledApplication(base.CalledApplicationPath, "SIGNTOOL.EXE") == false)
                throw new Exception("Could not find required application SIGNTOOL.EXE. Please, define it with 'GadgetProperties' form.");

            return base.GetOutputAndRunApplication();
        }

    }
}
